//Pablo Estrada 12121
//Alberto Suriano 12281
//Mario Gomez 12165

import java.lang.*;

public class Candado2 implements iCandado {
    //Atrbituos
    int[] combinacion;
    boolean estado; //cerrado true, abierto false
    int numero_actual;

    //Constructores
    public Candado2(){
        estado = true;
        combinacion = new int[4];
        combinacion[0]= 9;
        combinacion[1]= 0;
        combinacion[2]= 21;
        combinacion[3]= 0;
        numero_actual = 0;
        
    }
    
    public Candado2(int[] digitos){
        estado = true;
        combinacion = digitos;
        numero_actual = 0;
    }
    
    //Metodos de la Interfaz
    
    public boolean press(int numero) throws IllegalArgumentException{
        //Verifica el numero ingresado y abre el candado si todas las combinaciones son acertadas
        // si el candado esta abiero regresa null y el metodo no realiza nada
        if(estado==true){
            if(numero>25 || numero<0){
                throw new IllegalArgumentException("El valor del numero debe ser de 0 a 25");

            }
            if(numero==combinacion[numero_actual]){
                //Si el numero es igual movemos el indice de la contrasenia a la siguiente posicion
                numero_actual++;
                if(numero_actual==combinacion.length){
                    //Si todos los numero han coincidido el candado se abre
                    estado = false;
                }
                return true;
            }
            else{
                //Si el numero no coincide se reinicia el candado
                reset();
                return false;

            }
        }
        else{
            //Si el candado esta abierto no hacemos nada
            return false ;
        }
    }
    
    public void reset(){
       //Retorna a la primera posicion del candado
       numero_actual = 0;         
    }
    
    public boolean isLocked(){
        //Muestra si el candado esta abierto o cerrado
        return estado;
    }
    
    public void lock(){
        //Cierra el candado y lo reinicia
        reset();
        estado=true;
    }
    
    public int identify(){
    
        return 2;
    }
  
    
}
